package fr.afcepf.atod20.organismedeformation.data;

import java.util.List;

import fr.afcepf.atod20.organismedeformation.entity.Stagiaire;

/**
 * Définition des méthodes d'accès aux données du {@link Stagiaire}
 * dans la BDD 'organisme_formation'.
 * @author stagiaire
 *
 */
public interface IDaoStagiaire {
    /**
     * Méthode permettant de rechercher des {@link Stagiaire}
     * dans un {@link Organisme} de formation identifié.
     * @param idOrganisme {@link Organisme} souhaité.
     * @return
     * <code>
     *  <ul>
     *      <li>
     *          une {@link List} remplie de {@link Stagiaire} si <br />
     *          l'{@link Organisme} en possède.
     *      </li>
     *      <li>
     *          une {@link List} vide sinon.
     *      </li>
     *  </ul>
     * </code>
     */
    List<Stagiaire> rechercher(int idOrganisme);
    /**
     * Méthode permettant de rechercher des {@link Stagiaire}
     * par nom de formation identifié.
     * @param nomStagiaire {@link Stagiaire#nom} souhaité.
     * @return
     * <code>
     *  <ul>
     *      <li>
     *          une {@link List} remplie de {@link Stagiaire} dont <br />
     *          le {@link Stagiaire#nom} contient le nom recherché.
     *      </li>
     *      <li>
     *          une {@link List} vide sinon.
     *      </li>
     *  </ul>
     * </code>
     */
    List<Stagiaire> rechercher(String nomStagiaire);
    /**
     * Méthode permettant d'ajouter un {@link Stagiaire} dans la BDD.
     * @param stagiaire le {@link Stagiaire} à ajouter.
     * @return
     * <code>
     *  <ul>
     *      <li>un {@link Stagiaire} <strong>avec</strong>
     *      sa clé primaire renseignée si l'ajout à fonctionné.</li>
     *      <li>un {@link Stagiaire} <strong>sans</strong>
     *      sa clé primaire renseignée sinon.</li>
     *  </ul>
     * </code>
     */
    Stagiaire ajouter(Stagiaire stagiaire);
    /**
     * Méthode permettant d'enlever d'un {@link Organisme} le
     * {@link Stagiaire} souhaité.
     * @param stagiaire le {@link Stagiaire} à enlever.
     * @return
     * <code>
     *  <ul>
     *      <li>un {@link Stagiaire} <strong>sans</strong>
     *      son {@link Organisme} si le renvoi est effectif.</li>
     *      <li>un {@link Stagiaire} <strong>avec</strong>
     *      son {@link Organisme} sinon.</li>
     *  </ul>
     * </code>
     */
    Stagiaire renvoi(Stagiaire stagiaire);
}
